USE [Bases2]
GO
/****** Object:  StoredProcedure [dbo].[DepositoChequePropio]    Script Date: 12/01/2011 13:46:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DepositoChequePropio]
    @emisor int,
    @receptor int,
    @cheque int,
    @monto decimal(18,2),
    @agencia int
AS 
BEGIN
	SET NOCOUNT ON
	BEGIN TRANSACTION
	
	DECLARE @contador int;
	SET @contador=0	;
	
	SELECT @contador=COUNT(1)
	FROM CUENTA
	WHERE id_cuenta=@emisor 
	OR id_cuenta=@receptor
	
	IF @contador<=0
	BEGIN
		SELECT 'Alguna o ambas cuentas ingresadas no existen.';
	END
	ELSE
	BEGIN
		SELECT @contador=COUNT(1)
		FROM BANCO
		INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_cuenta 
		INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
		INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
		INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
		INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
		INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
		WHERE (ESTADO_CUENTA.id_tipo_estado=0 OR ESTADO_CUENTA.id_tipo_estado=1)
		AND ESTADO_CUENTA.estado=1
		AND (CUENTA.id_cuenta=@emisor OR CUENTA.id_cuenta=@receptor)
		
		IF @contador>0
		BEGIN
			SELECT 'Alguna o ambas cuentas que ingreso se encuentran bloqueadas o canceladas.';
		END
		ELSE
		BEGIN
			SELECT @Contador=COUNT(1)
			FROM CHEQUE
			INNER JOIN CHEQUERA ON CHEQUE.id_chequera=CHEQUERA.id_chequera
			INNER JOIN CUENTA ON CUENTA.id_cuenta=CHEQUERA.id_cuenta
			WHERE CUENTA.id_cuenta=@emisor
			AND CHEQUE.id_cheque=@cheque
			
			IF @Contador<=0
			BEGIN
				SELECT 'No existe asignado un cheque numero ['+CAST(@cheque as varchar)+'] que pertenezca a la cuenta ['+CAST(@emisor as varchar)+'].'
			END
			ELSE
			BEGIN
				SELECT @Contador=COUNT(1)
				FROM CHEQUE
				WHERE cobrado=1	
				AND id_cheque=@cheque							
									
				IF @Contador>0
				BEGIN
					SELECT 'El cheque numero ['+CAST(@cheque as varchar)+'] ya se ha cobrado.'						
				END
				ELSE
				BEGIN
					DECLARE @DepositosCompensados decimal (18,2), @Debitos decimal (18,2), @Diferencia decimal (18,2)			
			
					SELECT @DepositosCompensados=SUM(monto)
					FROM DEPOSITO
					INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
					WHERE CUENTA.id_cuenta=@emisor
					AND DEPOSITO.compensado=1												
					
					SELECT @Debitos=SUM(monto)
					FROM DEBITO
					INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
					WHERE CUENTA.id_cuenta=@emisor
					
					SET @Diferencia= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)
					
					IF @Diferencia<@monto
					BEGIN
						SELECT 'La cuenta ['+CAST(@emisor as varchar)+'] no cuenta con el monto necesario para la transferencia.'			
					END
					ELSE
					BEGIN	
						SELECT @Contador=COUNT(1)
						FROM CHEQUE
						INNER JOIN CHEQUERA ON CHEQUE.id_chequera=CHEQUERA.id_chequera
						INNER JOIN CUENTA ON CUENTA.id_cuenta=CHEQUERA.id_cuenta
						WHERE CUENTA.id_cuenta=@emisor
						AND CHEQUE.id_cheque=@cheque
						
						IF @Contador<=0
						BEGIN
							SELECT 'No existe asignado un cheque ['+CAST(@cheque as varchar)+'] que pertenezca a la cuenta ['+CAST(@emisor as varchar)+'].'
						END
						ELSE
						BEGIN									
							SELECT @Contador=COUNT(1)
							FROM ESTADO_CHEQUE
							WHERE estado=1
							AND id_cheque=@cheque
							
							IF @Contador>0
							BEGIN							
								SELECT 'El cheque numero ['+CAST(@cheque as varchar)+'] se encuentra bloqueado.'
							END
							ELSE
							BEGIN
								/**********BITACORA*************/
								DECLARE @Diferencia3 decimal (18,2)
								SELECT @DepositosCompensados=SUM(monto)
								FROM DEPOSITO
								INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
								WHERE CUENTA.id_cuenta=@receptor
								AND DEPOSITO.compensado=1												
								
								SELECT @Debitos=SUM(monto)
								FROM DEBITO
								INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
								WHERE CUENTA.id_cuenta=@receptor
								
								SET @Diferencia3= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)
								/**********BITACORA*************/	
							
								SELECT TOP(1) @contador=DEPOSITO.id_deposito
								FROM DEPOSITO
								ORDER BY DEPOSITO.id_deposito DESC
								
								IF @Contador IS NULL
								BEGIN
									SET @Contador=-1
								END
								
								SET @contador=@contador+1
												
								INSERT INTO DEPOSITO VALUES(@contador,@monto,@receptor,@agencia,1,@cheque)
								
								SELECT TOP(1) @contador=DEBITO.id_debito
								FROM DEBITO
								ORDER BY DEBITO.id_debito DESC
								
								IF @Contador IS NULL
								BEGIN
									SET @Contador=-1
								END
								
								SET @contador=@contador+1
												
								INSERT INTO DEBITO VALUES(@contador,@monto,@agencia,@emisor)
								
								UPDATE CHEQUE 
								SET cobrado=1,id_deposito=@contador
								WHERE id_cheque=@cheque
								
								/**********BITACORA*************/
								DECLARE @Diferencia2 decimal (18,2)
								SELECT @DepositosCompensados=SUM(monto)
								FROM DEPOSITO
								INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
								WHERE CUENTA.id_cuenta=@emisor
								AND DEPOSITO.compensado=1												
								
								SELECT @Debitos=SUM(monto)
								FROM DEBITO
								INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
								WHERE CUENTA.id_cuenta=@emisor
								
								SET @Diferencia2= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)
								
								DECLARE @Diferencia4 decimal (18,2)
								SELECT @DepositosCompensados=SUM(monto)
								FROM DEPOSITO
								INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
								WHERE CUENTA.id_cuenta=@receptor
								AND DEPOSITO.compensado=1												
								
								SELECT @Debitos=SUM(monto)
								FROM DEBITO
								INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
								WHERE CUENTA.id_cuenta=@receptor
								
								SET @Diferencia4= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)
								
								SET @contador=-1							
								SELECT TOP(1) @contador=BITACORA.id_bitacora
								FROM BITACORA
								ORDER BY BITACORA.id_bitacora DESC
								
								IF @contador IS NULL
								BEGIN
									SET @contador=-1
								END
								
								SET @contador=@contador+1							
								
								INSERT INTO BITACORA VALUES(@contador,GETDATE(),2,@emisor,@Diferencia,@monto,@Diferencia2,'Se debito el cheque ['+CAST(@cheque as varchar)+']')
								INSERT INTO BITACORA VALUES(@contador+1,GETDATE(),2,@receptor,@Diferencia3,@monto,@Diferencia4,'Se deposito el cheque ['+CAST(@cheque as varchar)+']')
								/**********BITACORA*************/
								
								SELECT 'Deposito realizada correctamente.'
							END
						END
					END
				END
			END
								
		END
	END	
	
	COMMIT
	SET NOCOUNT OFF
END